package com.ruoyi.art.controller;

import com.ruoyi.art.domain.FileInfo;
import com.ruoyi.art.dto.Result;
import com.ruoyi.art.service.FileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/files")

public class FileController {
    @Autowired
    private FileService fileService;

    /**
     * 文件上传接口
     * POST /api/files/upload
     * @param file 前端传入的 MultipartFile
     * @return 保存后的 FileInfo 对象（包含 URL）
     */
    @PostMapping("/upload")
    public Result upload(@RequestParam("file") MultipartFile file,
                         @RequestParam(name = "userId",defaultValue = "0") int userId,
                         @RequestParam(name = "stuId",defaultValue = "0") int stuId) {


        FileInfo info = fileService.uploadFile(file, userId, stuId);

        // 返回 201 Created 并在 Location 头中指向获取详情的 URI
        return Result.ok().data("file", info);
    }

//    /**
//     * 查询文件元数据
//     * GET /api/files/{id}
//     * @param id 文件 ID
//     * @return 对应的 FileInfo
//     */
//    @GetMapping("/{id}")
//    public ResponseEntity<FileInfo> getInfo(@PathVariable Long id) {
//        FileInfo info = fileService.getFileInfo(id);
//        if (info == null) {
//            return ResponseEntity.notFound().build();
//        }
//        return ResponseEntity.ok(info);
//    }

//    /**
//     * 预览或下载文件（可选）
//     * GET /api/files/{id}/stream
//     * 本接口会重定向到 MinIO 的直链地址，也可以用作下载。
//     */
//    @GetMapping("/{id}/stream")
//    public ResponseEntity<Void> stream(@PathVariable Long id) {
//        FileInfo info = fileService.getFileInfo(id);
//        if (info == null) {
//            return ResponseEntity.notFound().build();
//        }
//        // 重定向到 MinIO 的预签名 URL
//        return ResponseEntity
//                .status(302)
//                .location(URI.create(info.getUrl()))
//                .build();
//    }




//    @GetMapping("/{id}/proxy")
//    public ResponseEntity<byte[]> proxy(@PathVariable Long id) {
//        FileInfo info = fileService.getFileInfo(id);
//        if (info == null) {
//            return ResponseEntity.notFound().build();
//        }
//        // 这里假设 FileServiceImpl 提供了一个下载字节数组的方法
//        byte[] data = fileService.downloadFileBytes(id);
//        return ResponseEntity.ok()
//                .header(HttpHeaders.CONTENT_DISPOSITION,
//                        "inline; filename=\"" + info.getFileName() + "\"")
//                .contentLength(data.length)
//                .contentType(MediaType.parseMediaType(info.getContentType()))
//                .body(data);
//    }
}
